课堂中讲解的示例

<script type="text/javascript">
    document.querySelector("button").onclick = function(){
        getPhoneData();
    }
        // var xhr = new XMLHttpRequest();
        // xhr.onreadystatechange = function(){
        //     if(xhr.readyState === 4){
        //         if(xhr.status === 200 || xhr.status === 304){
        //             console.log(xhr.responseText);
        //         }
        //     }
        // }
        // //   ./ 当前目录    ../上级目录   /代表根目录
        // xhr.open("get","http://localhost/lesson/1706/Ajax/data.json",true);
        // xhr.send(null);

        //XMLHttpRequest 对象 是 AJAX 的核心
        //不兼容的 IE4.0 5.0 6.0 7.0用的都不同
        // [
        //     "MSXML2.XMLHttp.6.0",
        // "MSXML2.XMLHttp.30",
        // "MSXML2.XMLHttp",
        // "Microsoft.XMLHTTP"];
        //ActiveXObject();
        function getPhoneData(){
            //兼容性处理
            var xhr = null;
            if(window.XMLHttpRequest){
                //主流浏览器
                xhr = new XMLHttpRequest();
            }else{
                //IE 浏览器
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            };
            //监听状态变化事件 readystatechange  每当有状态变化时,触发 最多五次
            xhr.onreadystatechange = function(){
                console.log("变化");
                //每一个状态都有一个状态码 readyState
                // 0  未初始化  尚未调用 open()方法
                // 1  启动    调用 open()方法  尚未调用 send()方法
                // 2  发送  已经调用 send()方法,但尚未接收到响应数据
                // 3 接收  服务器已经返回部分可用数据
                // 4 接收完成   所有数据可用
                // 并不是所有浏览器都按照从0到4依次触发,所以程序员只需关注4即可
                console.log(xhr.readyState)
                // responseText
                if(xhr.readyState === 4){//代表数据已经全部响应完毕,可安全使用
                    //xhr.status  http 状态码
                    // 200 请求成功
                    // 304  请求缓存数据成功
                    // 404  代表地址未找到
                    // 403  没有访问权限(访问被拒绝)
                    // 500 或以上 服务器内部错误
                    console.log(xhr.status);
                    var div = document.querySelector("#list");
                    if(xhr.status===200){
                        div.innerHTML = "";
                        // console.log(xhr.responseText)
                        var result = JSON.parse(xhr.responseText);
                        for(var i=0;i<result.length;i++){
                            var phone = result[i];
                            var h1 = document.createElement("h1");
                            var h2 = document.createElement("h2");
                            h1.innerHTML = phone.name;
                            h2.innerHTML = "价格:"+phone.price+"--颜色:"+phone.color;
                            div.appendChild(h1);
                            div.appendChild(h2);
                        }
                    }
                }
            }
            //xhr.open(method,url,isAsync)  启动一个请求 待发送
            //并不像字面理解打开请求
            //GET 请求是将请求参数拼接到 URL 的后面,通过 ?a=b&c=d&....
            // GET 请求一般用于数据获取请求,能传递的参数量较小,且为明文
            // POST请求将请求参数置于请求体中,能够传输大量的参数数据
            xhr.open("get","./data.json",true);

            // xhr.open("get","./index.php?user=xfdsafsda&age=55",true);
            // xhr.open("post","./index.php",true);

            //xhr.send(param)  发送请求  参数代表要发往服务器的数据
            //setRequestHeader(name,val) 设置请求头
            //如果要发送 POST 请求数据,需要先设置请求头,以表单形式发送数据
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            //send 中填写要发送的数据  a=b&c=d&...
            // xhr.send("user=zhar&age=30");
            xhr.send(null);
        }

</script>

results matching ""

    No results matching ""